package middleware

import (
	"github.com/gin-gonic/gin"
	"goTestToMod/rate_limiter_byId/limiter"
)

func RateLimit(rate, cap int) gin.HandlerFunc {
	/*
	基于令牌桶的思维实现限流，该限流用使用中间件实现
		rate: 每秒生成的令牌数量
		cap：　令牌桶内的总容量
	*/
	limiter := limiter.GetLimiter(rate, cap)
	return func(c *gin.Context) {
		if ok, err := limiter.IsLimit(c); ok {
			c.JSON(502, gin.H{
				"err": err.Error(),
			})
			c.Abort()
			return
		}
		c.Next()
	}
}
